3. 烧录控制程序
完成硬件搭建后,为了能让这些模块和板子运作起来,需要向主控板烧录程序。
注意:根据自己的环境信息修改样例代码中的wifi信息和测试IoT网站账号。
//meanings: wifi ssid(DFRobot-guest), wifi password(dfrobot@2017), iot_id(Skv3zKyNb), iot_password(r1lD3ztJ4b)
Obloq olq(&softSerial,"DFRobot-guest","dfrobot@2017","Skv3zKyNb","r1lD3ztJ4b");
//Iot deviceTopic:BJpHJt1VW
const String devTopic = "BJpHJt1VW";
具体代码 (由于版本更新,如果不能使用,建议查看最新样例代码库)
#include <SoftwareSerial.h>
#include "Obloq.h"
SoftwareSerial softSerial(10,11);
//生成OBLOQ对象,参数:串口指针,wifiSsid, WifiPwd, iotId, iotPwd
//Generate OBLOQ object, parameters: serial pointer, wifiSsid, WifiPwd, iotId, iotPwd
Obloq olq(&softSerial,"DFRobot-guest","dfrobot@2017","Skv3zKyNb","r1lD3ztJ4b");
const String devTopic = "BJpHJt1VW";
//led小灯引脚 led pin
int ledPin = 13;
//已监听设备的消息回调函数,可以在这个函数里面对接收的消息做判断和相应处理,需要用setMsgHandle()来设置这个回调函数
//message callback function of the subscribed device. This function handle the message received. setMsgHandle() will change settings of this function.
void msgHandle(const String& topic,const String& message)
{
if(devTopic == topic)
{
if(message == "1")
digitalWrite(ledPin,LOW);
else if(message == "2")
digitalWrite(ledPin,HIGH);
}
}
void setup()
{
pinMode(ledPin,OUTPUT);
softSerial.begin(9600);
olq.setMsgHandle(msgHandle);//注册消息回调函数 register message callback function
olq.subscribe(devTopic); //监听设备 Subscribe topic
}
void loop()
{
olq.update();
}
烧录完成后,先按下OBLOQ上的reset键重启OBLOQ,再按下主控板上的“Reset”按键重启主控板,然后等待OBLOQ模块连接MQTT即可。
(附1)发布消息样例代码
上面的样例代码,主要讲了这样一个过程:DF-IoT网站可以向Obloq发送数据,当Obloq监听到数据后,将数据传给Arduino控制小灯亮灭。那反过来,Obloq能不能向DF-IoT网站发送数据呢?当然可以。下面就是Obloq每隔10s发送一条消息的样例代码。
具体代码 (由于版本更新,如果不能使用,建议查看最新样例代码库)
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "Obloq.h"
SoftwareSerial softSerial(10,11);
//生成OBLOQ对象,参数:串口指针,wifiSsid,WifiPwd,iotId,iotPwd
//Generate OBLOQ object, parameters: serial pointer, wifiSsid, WifiPwd, iotId, iotPwd
Obloq olq(&softSerial,"DFRobot-guest","dfrobot@2017","Skv3zKyNb","r1lD3ztJ4b");
static unsigned long currentTime = 0;
unsigned long messageCount = 1;
void setup()
{
softSerial.begin(9600);
}
void loop()
{
olq.update();
if(millis() - currentTime > 10000)
{
currentTime = millis();
//向设备发送消息,设备Topic:BJpHJt1VW,消息内容:从1开始累加的计数
//Publish message to device (Topic:BJpHJt1VW), message contents: accumulated numbers counting from 1.
olq.publish("BJpHJt1VW", String(messageCount++));
}
}
(附2)基于HTTP协议样例代码
之前的样例代码,Obloq使用的都是MQTT协议连接物联网。其实Obloq也可以使用HTTP协议上网。下面展示的分别是基于HTTP协议的GET方法和POST方法。
与基于MQTT协议的访问不同,HTTP协议不需要使用iot_id, iot_pwd这两个参数,例如:Obloq olq(&softSerial,"DFRobot-guest","dfrobot@2017");。
访问成功后,样例代码中的 httpMsgHandle 函数可以串口打印出服务器返回的code(系统消息)和message(具体消息)。
注意:如果Obloq使用HTTP POST发送数据,发送的数据必须是Json字符串,接收数据的服务器也必须可以接受Json类型的数据。
具体代码:HTTP GET (由于版本更新,如果不能使用,建议查看最新样例代码库)
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "Obloq.h"
SoftwareSerial softSerial(10,11);
//生成OBLOQ对象,参数:串口指针,wifiSsid,WifiPwd
//Generate OBLOQ object, parameters: serial pointer, wifiSsid, WifiPwd
Obloq olq(&softSerial,"DFRobot-guest","dfrobot@2017");
static unsigned long currentTime = 0;
void httpMsgHandle(const String& code,const String& message)
{
Serial.println("Code: " + code);
Serial.println("Message: " + message);
}
void setup()
{
softSerial.begin(9600);
Serial.begin(115200);
olq.setHttpMsgHandle(httpMsgHandle);
}
int number = 1;
void loop()
{
olq.update();
if(millis() - currentTime > 2000)
{
currentTime = millis();
olq.get("http://iot_s1.dfrobot.com.cn:3001/apiv2/publish?topic=aaa&iot_name=bbb&iot_pwd=ccc&message="+String(number));
number++;
}
}
具体代码:HTTP POST (由于版本更新,如果不能使用,建议查看最新样例代码库)
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "Obloq.h"
SoftwareSerial softSerial(10,11);
//生成OBLOQ对象,参数:串口指针,wifiSsid,WifiPwd
//Generate OBLOQ object, parameters: serial pointer, wifiSsid, WifiPwd
Obloq olq(&softSerial,"DFRobot-guest","dfrobot@2017");
static unsigned long currentTime = 0;
void httpMsgHandle(const String& code,const String& message)
{
Serial.println("Code: " + code);
Serial.println("Message: " + message);
}
void setup()
{
softSerial.begin(9600);
Serial.begin(115200);
olq.setHttpMsgHandle(httpMsgHandle);
}
void loop()
{
olq.update();
if(millis() - currentTime > 2000)
{
currentTime = millis();
// post传递的数据是JSON格式
// post data is in JSON format
olq.post("http://192.168.7.123/test","{\"abc\":12222}");
}
}